package com.sun.jdk.stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 集合操作的弊端
 */
public class StreamTest01 {

    public static void main(String[] args) {

        List<String> list = Arrays.asList("张三", "张三丰", "成龙", "周星驰");

        // 获取所有姓张的姓名
        // List<String> resultList = new ArrayList<>();
        // for (String s : list) {
        //     if (s.startsWith("张")) {
        //         resultList.add(s);
        //     }
        // }
        // // printList(resultList);
        //
        // // 获取所有姓张的，并且姓名长度等于3的
        // List<String> resultList2 = new ArrayList<>();
        // for (String s : resultList) {
        //     if (s.length() == 3) {
        //         resultList2.add(s);
        //     }
        // }
        // printList(resultList2);

        // 上面两步操作可以使用下面这两个流式方法实现
        List<String> tempResult = list.stream().filter(item -> item.startsWith("张")).collect(Collectors.toList());
        printList(tempResult);
        System.out.println("---");

        List<String> finalResult = tempResult.stream().filter(item -> item.length() == 3).collect(Collectors.toList());
        printList(finalResult);
        System.out.println("---");

        // list.stream().filter(item -> item.startsWith("张")).filter(item -> item.length() == 3).forEach(System.out::println);
        System.out.println("---");
        // 上面两步操作可以使用下面这个流式方法实现
        List<String> result = list.stream().filter((item) -> item.startsWith("张") && item.length() == 3).collect(Collectors.toList());
        printList(result);
    }

    // 打印list集合中的内容
    private static void printList(List<String> list) {
        for (String s : list) {
            System.out.println(s);
        }
    }
}
